RT_SECURE_NO_WARNINGS 1

#include<iostream>
using std::cout;
using std::endl;

//int& Count()
//{
//	int n = 0;
//	cout << "&n:" << &n << endl;
//	n++;
//	return n;
//}

int& Add(int a, int b)
{
	int c = 0;
	c = a + b;
	return c;
}

int main()
{
	int& ret = Add(1,2);
	Add(3, 4);
	cout << "Add(1,2) is :" << ret << endl;
	cout << "Add(1,2) is :" << ret << endl;
	cout << "Add(1,2) is :" << ret << endl;

	//cout << ret << endl;
	//cout << &ret << endl;
	//cout << "ret:" << ret << endl;
	//cout << ret << endl;
	//Add(1,3);
	//cout << ret << endl;
	//cout << ret << endl;


	//double a = 5.2;
	//int b = a;
	////这里是相当于类型转换，相对于c的隐式转换有所不同
	////因为int和double的存储方式不一样
	//const int& c = b;
	////注意：这里用c去作为b的引用，前面要加上const，因为
	////其实用c去引用b是在中间产生了一个临时变量，而临时
	////变量具有常性，所以要加上const，相当于中间产生了
	////个5也可以这么理解


	////取别名的原则，只能缩小不能放大
	//int a = 10;
	//int& b = a;//权限不变

	//const int c = 100;
	////int& d = c;  //权限放大 err

	//int e = 200;
	//const int& f = e;//权限缩小
	return 0;
}


///**
// * struct ListNode {
// *	int val;
// *	struct ListNode *next;
// * };
// */
//
// /**
//  *
//  * @param pHead1 ListNode类
//  * @param pHead2 ListNode类
//  * @return ListNode类
//  */
//struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2) {
//    // write code here
//    if (!pHead1) return pHead2;
//    if (!pHead2) return pHead1;
//
//    struct ListNode* pHead3 = pHead1;
//    if (pHead2->val < pHead1->val)
//    {
//        pHead3 = pHead2;
//        pHead2 = pHead2->next;
//    }
//    else pHead1 = pHead1->next;
//    struct ListNode* pRet = pHead3;
//
//    while (pHead1 && pHead2)
//    {
//        if (pHead1->val < pHead2->val)
//        {
//            pHead3->next = pHead1;
//            pHead3 = pHead3->next;
//            pHead1 = pHead1->next;
//        }
//        else
//        {
//            pHead3->next = pHead2;
//            pHead3 = pHead3->next;
//            pHead2 = pHead2->next;
//        }
//    }
//    if (pHead1)
//    {
//        pHead3->next = pHead1;
//    }
//    if (pHead2) pHead3->next = pHead2;
//
//    return pRet;
//}
